package example

import (
	"fmt"
	"io"
	"os"
	"strings"
)

// 错误处理示例

func Case8() {
	fmt.Println("🎯错误处理示例")

	// 1. 检查文件是否存在
	if _, err := os.Stat("nonexistent.txt"); os.IsNotExist(err) {
		fmt.Println("文件不存在")
	} else {
		fmt.Println("文件存在")
	}

	// 2. 读取不存在的文件
	_, err := os.Open("nonexistent.txt")
	if err != nil {
		fmt.Printf("打开文件错误: %v\n", err)
	}

	// 3. 处理读取时的错误
	file, err := os.Create("error_test.txt")
	if err != nil {
		fmt.Printf("创建文件失败: %v\n", err)
		return
	}
	defer os.Remove("error_test.txt")
	defer file.Close()

	file.WriteString("测试数据")
	file.Close() // 先关闭

	// 尝试在关闭后写入
	_, err = file.WriteString("新数据")
	if err != nil {
		fmt.Printf("写入已关闭文件错误: %v\n", err)
	}

	// 4. 使用io.EOF判断读取结束
	reader := strings.NewReader("短文本")
	buf := make([]byte, 100)

	for {
		n, err := reader.Read(buf)
		if err == io.EOF {
			fmt.Println("读取正常结束")
			break
		}
		if err != nil {
			fmt.Printf("读取错误: %v\n", err)
			break
		}
		fmt.Printf("读取到 %d 字节\n", n)
	}
}
